package com.zhihao.domain.strategy.service.armory.algorithm;

import com.zhihao.domain.strategy.model.entity.StrategyAwardEntity;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author Jackson
 * @create 2025/4/7 9:47
 * @description 抽奖算法接口类(策略模式)
 *              ---O(1)空间换时间     or     O(n)... 循环遍历、二分查找、多线程判断
 */
public interface IAlgorithm {

    /**
     * 抽奖算法装配
     * @param key 活动ID/策略ID
     * @param strategyAwardEntities 抽奖策略/轮盘对应的奖品实体类
     * @param rateRange 最小奖品概率分位对应的10次幂值
     */
    void armoryAlgorithm(String key, List<StrategyAwardEntity> strategyAwardEntities, BigDecimal rateRange);

    /**
     * 执行抽奖
     * @param key 策略id
     * @return awardId-奖品ID
     */
    Integer dispatchAlgorithm(String key);

}
